package com.example.controleautomovel.adapter;

import java.util.ArrayList;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import com.example.controleautomovel.pojo.Automovel;

public class AutomovelDBAdapter {
	
	private final Context ctx;
	private automovelDBHelper dbHelper;
	private SQLiteDatabase db;
	
	private static final String NOME_BANCO = "combustivel.db";
	private static final String NOME_TABELA = "AUTOMOVEL";
	private static final int VERSAO_BANCO = 20;
	
	private static final String COL_ID = "ID";
	private static final String COL_NOME = "NOME";
	private static final String COL_PLACA = "PLACA";
	private static final String COL_ANO = "ANO";
	private static final String COL_CHASSI = "CHASSI";
	private static final String COL_MARCA = "MARCA";
	private static final String COL_MODELO = "MODELO";
	private static final String COL_FOTO = "FOTO";
	private static final String COL_PRINCIPAL = "COL_PREFERENCIAL";
	private static final String COL_TIPO_ODOMETRO = "COL_TIPO_ODOMETRO";
	
	private static final String SQL_TABELA_AUTOMOVEL = "create table " + NOME_TABELA +
												"(" + COL_ID + " integer primary key autoincrement," +
												COL_NOME + " text not null," +
												COL_PLACA + " text not null," +
												COL_ANO + " text not null," +
												COL_CHASSI + " text not null," +
												COL_MARCA + " text not null," +
												COL_MODELO + " text not null," +
												COL_PRINCIPAL + " text not null," +
												COL_TIPO_ODOMETRO + " text not null," +
												COL_FOTO + " text )";
	
	public AutomovelDBAdapter(Context ctx) {
		this.ctx = ctx;
		dbHelper = new automovelDBHelper(ctx, NOME_BANCO, null, VERSAO_BANCO);
	}
	
	public AutomovelDBAdapter open(){
		db = dbHelper.getWritableDatabase();
		return this;
	}
	
	public void close(){
		db.close();
	}
	
	public int inserirAutomovel(Automovel c){
		this.deletarTodos();
		ContentValues valores = new ContentValues();
		valores.put(COL_NOME, c.getNome());
		valores.put(COL_PLACA, c.getPlaca());
		valores.put(COL_ANO, c.getAno());
		valores.put(COL_CHASSI, c.getChassi());
		valores.put(COL_MARCA, c.getMarca());
		valores.put(COL_MODELO, c.getModelo());
		valores.put(COL_PRINCIPAL, c.getPrincipal());
		valores.put(COL_TIPO_ODOMETRO, c.getTipoOdometro());
		valores.put(COL_FOTO, c.getFoto());
		return (int) db.insert(NOME_TABELA, null, valores);
	}
	
	public Automovel recuperarAutomovel(int id){
		Automovel c = new Automovel();
		
		String[] colunas = {COL_ID, COL_NOME, COL_PLACA, COL_ANO, COL_CHASSI, COL_CHASSI, COL_MARCA, COL_MODELO, COL_FOTO, COL_PRINCIPAL};
		Cursor resultados = db.query(NOME_TABELA, colunas, 
				COL_ID + " = " + id, null, null, null, COL_ID);
		
		resultados.moveToFirst();
		c.setId(resultados.getInt(resultados.getColumnIndex(COL_ID)));
		c.setNome(resultados.getString(resultados.getColumnIndex(COL_NOME)));
		c.setPlaca(resultados.getString(resultados.getColumnIndex(COL_PLACA)));
		c.setAno(resultados.getString(resultados.getColumnIndex(COL_ANO)));
		c.setChassi(resultados.getString(resultados.getColumnIndex(COL_CHASSI)));
		c.setMarca(resultados.getString(resultados.getColumnIndex(COL_MARCA)));
		c.setModelo(resultados.getString(resultados.getColumnIndex(COL_MODELO)));
		c.setPrincipal(resultados.getString(resultados.getColumnIndex(COL_PRINCIPAL)));
		c.setFoto(resultados.getString(resultados.getColumnIndex(COL_FOTO)));
		
		return c;
	}
	
	public int editarContato(int id, Automovel c){
		ContentValues valores = new ContentValues();
		valores.put(COL_NOME, c.getNome());
		valores.put(COL_PLACA, c.getPlaca());
		valores.put(COL_ANO, c.getAno());
		valores.put(COL_CHASSI, c.getChassi());
		valores.put(COL_MARCA, c.getMarca());
		valores.put(COL_MODELO, c.getModelo());
		valores.put(COL_FOTO, c.getFoto());
		
		return db.update(NOME_TABELA, valores, COL_ID + " = " + id, null);
	}
	
	public int deletarTodos(){
		return db.delete(NOME_TABELA, null, null);
	}
	
	public int deletarAutomovel(int id){
		return db.delete(NOME_TABELA, COL_ID + " = " + id, null);
	}
	
	public ArrayList<Automovel> listaAutomoveis(){
		ArrayList<Automovel> lista = new ArrayList<Automovel>();
		String[] colunas = {COL_ID, COL_NOME, COL_PLACA, COL_ANO, COL_CHASSI, COL_CHASSI, COL_MARCA, COL_MODELO, COL_FOTO, COL_PRINCIPAL};
		Cursor resultados = db.query(NOME_TABELA, colunas, null, null, null, null, COL_ID);
		Automovel c;
		if(resultados.getCount() > 0){
			resultados.moveToFirst();
			do{
				c = new Automovel();
				c.setId(resultados.getInt(resultados.getColumnIndex(COL_ID)));
				c.setNome(resultados.getString(resultados.getColumnIndex(COL_NOME)));
				c.setPlaca(resultados.getString(resultados.getColumnIndex(COL_PLACA)));
				c.setAno(resultados.getString(resultados.getColumnIndex(COL_ANO)));
				c.setChassi(resultados.getString(resultados.getColumnIndex(COL_CHASSI)));
				c.setMarca(resultados.getString(resultados.getColumnIndex(COL_MARCA)));
				c.setModelo(resultados.getString(resultados.getColumnIndex(COL_MODELO)));
				c.setPrincipal(resultados.getString(resultados.getColumnIndex(COL_PRINCIPAL)));
				c.setFoto(resultados.getString(resultados.getColumnIndex(COL_FOTO)));
				
				lista.add(c);
			}while(resultados.moveToNext());
		}
		
		return lista;
	}
	
	public Automovel loadCarroPreferencial(){
		String[] colunas = {COL_ID, COL_NOME, COL_ANO};
		String[] args = {"1"};
		Cursor resultados = db.query(NOME_TABELA, colunas, COL_PRINCIPAL, args, null, null, null);
		
		Automovel a = null;
		if(resultados.getCount() > 0){
			resultados.moveToFirst();
			do{
				a = new Automovel();
				a.setId(resultados.getInt(resultados.getColumnIndex(COL_ID)));
				a.setNome(resultados.getString(resultados.getColumnIndex(COL_NOME)));
				a.setAno(resultados.getString(resultados.getColumnIndex(COL_ANO)));
			}while(resultados.moveToNext());
		}
		
		return a;
	}
	
	private static class automovelDBHelper extends SQLiteOpenHelper{
		
		public automovelDBHelper(Context context, String name,
				CursorFactory factory, int version) {
			super(context, name, factory, version);
			// TODO Auto-generated constructor stub
		}

		@Override
		public void onCreate(SQLiteDatabase db) {
			// TODO Auto-generated method stub
			Log.d("DATABASE","onCreate!");
			db.execSQL(SQL_TABELA_AUTOMOVEL);
		}

		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			// TODO Auto-generated method stub
			Log.d("DATABASE","onUpgrade!");
			db.execSQL("DROP TABLE IF EXISTS " + NOME_TABELA);
			onCreate(db);
		}
		
	}
}
